package cineplanet.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import javax.sql.DataSource;

import cineplanet.dao.IProductoDAO;
import cineplanet.excepcion.DAOExcepcion;
import cineplanet.modelo.TabCombo;
import cineplanet.modelo.TabProducto;

public class ProductoDAO extends HibernateDaoSupport implements IProductoDAO {

	protected Log log = LogFactory.getLog(getClass());
	
	private DataSource dataSource;

	public void setDataSource(DataSource dataSource) {
		this.dataSource = dataSource;
	}
	
	@SuppressWarnings("unchecked")
	public TabProducto insertar(TabProducto objTabProducto) throws DAOExcepcion {
		try {
			getHibernateTemplate().save(objTabProducto);
			getHibernateTemplate().flush();
		} catch (Exception e) {
			log.error(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		}
		return objTabProducto;
	}

	@SuppressWarnings("unchecked")
	public TabProducto actualizar(TabProducto objTabProducto)
			throws DAOExcepcion {
		try {
			getHibernateTemplate().update(objTabProducto);
			getHibernateTemplate().flush();
		} catch (Exception e) {
			log.error(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		}
		return objTabProducto;
	}

	@SuppressWarnings("unchecked")
	public TabProducto obtener(TabProducto objTabProducto) throws DAOExcepcion {
		log.info("obtener() : " + objTabProducto.getPRO_IdProducto());
		TabProducto oTabProducto = null;
		try {
			oTabProducto = (TabProducto) getHibernateTemplate().find(
					"from TabProducto p where p.PRO_IdProducto = ?",
					objTabProducto.getPRO_IdProducto()).get(0);
		} catch (Exception e) {
			log.error("Error: " + e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		}
		return oTabProducto;
	}

	@SuppressWarnings("unchecked")
	public List<TabProducto> listar(TabProducto objTabProducto)
			throws DAOExcepcion {
		log.info("listar()");
		List<TabProducto> lista = null;
		try {
			lista = getHibernateTemplate().find("from TabProducto");
		} catch (DataAccessException e) {
			log.error(e.toString());
			throw new DAOExcepcion(e.getMessage());
		}
		return lista;
	}

	@SuppressWarnings("unchecked")
	public List<TabProducto> listarIndicaGenerico(TabProducto objTabProducto)
			throws DAOExcepcion {
		log.info("listarIndicaGenerico()");
		List<TabProducto> lista = null;
		try {
			lista = getHibernateTemplate().find("from TabProducto p where p.PRO_EsGenerico = ?",objTabProducto.getPRO_EsGenerico());
		} catch (DataAccessException e) {
			log.error(e.toString());
			throw new DAOExcepcion(e.getMessage());
		}
		return lista;
	}

	@SuppressWarnings("unchecked")
	public List<TabProducto> listarIndicaPadre(TabProducto objTabProducto)
			throws DAOExcepcion {
		log.info("listarIndicaPadre()");
		List<TabProducto> lista = null;
		try {
			lista = getHibernateTemplate().find("from TabProducto p where p.tabProducto.PRO_IdProducto = ?",objTabProducto.getTabProducto().getPRO_IdProducto());
		} catch (DataAccessException e) {
			log.error(e.toString());
			throw new DAOExcepcion(e.getMessage());
		}
		return lista;
	}

}
